#include<bits/stdc++.h>
using namespace std;

const int N=1e5+5;

int qpow(int x,int n)
{
    int res=1;
    while(n)
    {
        if(n&1)
            res*=x;
        x*=x;
        n>>=1;
    }
    return res;
}

int lg2(int x)
{
    for(int i=0;i<=100;i++)
        if(qpow(2,i)>=x)
            return i;
    return 0;
}

int n,m;
int a[N];
int c[N];
int d[N][55];
int t;

int v[N][55];
int K;

int main()
{
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);

    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=m;i++)
        cin>>c[i];

    for(int i=1;i<=100;i++)
        if(qpow(2,i)>=n)
        {
            K=i;
            break;
        }

    for(int i=1;i<=K;i++)
    {
        string s;
        cin>>s;
        for(int j=0;j<(int)s.size();j++)
            d[i][j+1]=s[j]-'0';
        d[i][0]=s.size();
    }

    cin>>t;
    while(t--)
    {
        int X[4];
        cin>>X[0]>>X[1]>>X[2]>>X[3];
        for(int i=1;i<=n;i++)
            a[i]=a[i]^X[i%4];

        for(int i=1;i<=n;i++)
            v[1][i]=i;
        for(int i=1;i<K;i++)
        {
            for(int j=1;j<=d[i][0];j+=2)
            {
                int l=(j+1)>>1;
                if(a[v[i][j+d[i][l]]]>=i)
                    v[i+1][l]=v[i][j+d[i][l]];
                else
                    v[i+1][l]=v[i][j+!(d[i][l])];
            }
        }

        int ans=0;

        for(int i=1;i<=m;i++)
        {
            ans^=v[lg2(c[i]+1)][1]*i;
        }

        cout<<ans<<'\n';
    }

    return 0;
}
